home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / java / net / URI$Parser.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  6.8 KB  |  534 lines

  1. package java.net;
  2.  
  3. class URI$Parser {
  4.    private String input;
  5.    private boolean requireServerAuthority;
  6.    private int ipv6byteCount;
  7.    // $FF: synthetic field
  8.    final URI this$0;
  9.  
  10.    URI$Parser(URI var1, String var2) {
  11.       this.this$0 = var1;
  12.       this.requireServerAuthority = false;
  13.       this.ipv6byteCount = 0;
  14.       this.input = var2;
  15.       URI.access$002(var1, var2);
  16.    }
  17.  
  18.    private void fail(String var1) throws URISyntaxException {
  19.       throw new URISyntaxException(this.input, var1);
  20.    }
  21.  
  22.    private void fail(String var1, int var2) throws URISyntaxException {
  23.       throw new URISyntaxException(this.input, var1, var2);
  24.    }
  25.  
  26.    private void failExpecting(String var1, int var2) throws URISyntaxException {
  27.       this.fail("Expected " + var1, var2);
  28.    }
  29.  
  30.    private void failExpecting(String var1, String var2, int var3) throws URISyntaxException {
  31.       this.fail("Expected " + var1 + " following " + var2, var3);
  32.    }
  33.  
  34.    private String substring(int var1, int var2) {
  35.       return this.input.substring(var1, var2);
  36.    }
  37.  
  38.    private char charAt(int var1) {
  39.       return this.input.charAt(var1);
  40.    }
  41.  
  42.    // $FF: renamed from: at (int, int, char) boolean
  43.    private boolean method_0(int var1, int var2, char var3) {
  44.       return var1 < var2 && this.charAt(var1) == var3;
  45.    }
  46.  
  47.    // $FF: renamed from: at (int, int, java.lang.String) boolean
  48.    private boolean method_1(int var1, int var2, String var3) {
  49.       int var4 = var1;
  50.       int var5 = var3.length();
  51.       if (var5 > var2 - var1) {
  52.          return false;
  53.       } else {
  54.          int var6;
  55.          for(var6 = 0; var6 < var5 && this.charAt(var4++) == var3.charAt(var6); ++var6) {
  56.          }
  57.  
  58.          return var6 == var5;
  59.       }
  60.    }
  61.  
  62.    private int scan(int var1, int var2, char var3) {
  63.       return var1 < var2 && this.charAt(var1) == var3 ? var1 + 1 : var1;
  64.    }
  65.  
  66.    private int scan(int var1, int var2, String var3, String var4) {
  67.       int var5;
  68.       for(var5 = var1; var5 < var2; ++var5) {
  69.          char var6 = this.charAt(var5);
  70.          if (var3.indexOf(var6) >= 0) {
  71.             return -1;
  72.          }
  73.  
  74.          if (var4.indexOf(var6) >= 0) {
  75.             break;
  76.          }
  77.       }
  78.  
  79.       return var5;
  80.    }
  81.  
  82.    private int scanEscape(int var1, int var2, char var3) throws URISyntaxException {
  83.       if (var3 == '%') {
  84.          if (var1 + 3 <= var2 && URI.access$300(this.charAt(var1 + 1), URI.access$100(), URI.access$200()) && URI.access$300(this.charAt(var1 + 2), URI.access$100(), URI.access$200())) {
  85.             return var1 + 3;
  86.          }
  87.  
  88.          this.fail("Malformed escape pair", var1);
  89.       } else if (var3 > 128 && !Character.isSpaceChar(var3) && !Character.isISOControl(var3)) {
  90.          return var1 + 1;
  91.       }
  92.  
  93.       return var1;
  94.    }
  95.  
  96.    private int scan(int var1, int var2, long var3, long var5) throws URISyntaxException {
  97.       int var7 = var1;
  98.  
  99.       while(var7 < var2) {
  100.          char var8 = this.charAt(var7);
  101.          if (URI.access$300(var8, var3, var5)) {
  102.             ++var7;
  103.          } else {
  104.             if ((var3 & 1L) == 0L) {
  105.                break;
  106.             }
  107.  
  108.             int var9 = this.scanEscape(var7, var2, var8);
  109.             if (var9 <= var7) {
  110.                break;
  111.             }
  112.  
  113.             var7 = var9;
  114.          }
  115.       }
  116.  
  117.       return var7;
  118.    }
  119.  
  120.    private void checkChars(int var1, int var2, long var3, long var5, String var7) throws URISyntaxException {
  121.       int var8 = this.scan(var1, var2, var3, var5);
  122.       if (var8 < var2) {
  123.          this.fail("Illegal character in " + var7, var8);
  124.       }
  125.  
  126.    }
  127.  
  128.    private void checkChar(int var1, long var2, long var4, String var6) throws URISyntaxException {
  129.       this.checkChars(var1, var1 + 1, var2, var4, var6);
  130.    }
  131.  
  132.    void parse(boolean var1) throws URISyntaxException {
  133.       this.requireServerAuthority = var1;
  134.       int var3 = this.input.length();
  135.       int var4 = this.scan(0, var3, "/?#", ":");
  136.       int var2;
  137.       if (var4 >= 0 && this.method_0(var4, var3, ':')) {
  138.          if (var4 == 0) {
  139.             this.failExpecting("scheme name", 0);
  140.          }
  141.  
  142.          this.checkChar(0, 0L, URI.access$400(), "scheme name");
  143.          this.checkChars(1, var4, URI.access$500(), URI.access$600(), "scheme name");
  144.          URI.access$702(this.this$0, this.substring(0, var4));
  145.          ++var4;
  146.          var2 = var4;
  147.          if (this.method_0(var4, var3, '/')) {
  148.             var4 = this.parseHierarchical(var4, var3);
  149.          } else {
  150.             int var5 = this.scan(var4, var3, "", "#");
  151.             if (var5 <= var4) {
  152.                this.failExpecting("scheme-specific part", var4);
  153.             }
  154.  
  155.             this.checkChars(var4, var5, URI.access$800(), URI.access$900(), "opaque part");
  156.             var4 = var5;
  157.          }
  158.       } else {
  159.          var2 = 0;
  160.          var4 = this.parseHierarchical(0, var3);
  161.       }
  162.  
  163.       URI.access$1002(this.this$0, this.substring(var2, var4));
  164.       if (this.method_0(var4, var3, '#')) {
  165.          this.checkChars(var4 + 1, var3, URI.access$800(), URI.access$900(), "fragment");
  166.          URI.access$1102(this.this$0, this.substring(var4 + 1, var3));
  167.          var4 = var3;
  168.       }
  169.  
  170.       if (var4 < var3) {
  171.          this.fail("end of URI", var4);
  172.       }
  173.  
  174.    }
  175.  
  176.    private int parseHierarchical(int var1, int var2) throws URISyntaxException {
  177.       int var3 = var1;
  178.       if (this.method_0(var1, var2, '/') && this.method_0(var1 + 1, var2, '/')) {
  179.          var3 = var1 + 2;
  180.          int var4 = this.scan(var3, var2, "", "/?#");
  181.          if (var4 > var3) {
  182.             var3 = this.parseAuthority(var3, var4);
  183.          } else if (var4 >= var2) {
  184.             this.failExpecting("authority", var3);
  185.          }
  186.       }
  187.  
  188.       int var7 = this.scan(var3, var2, "", "?#");
  189.       this.checkChars(var3, var7, URI.access$1200(), URI.access$1300(), "path");
  190.       URI.access$1402(this.this$0, this.substring(var3, var7));
  191.       var3 = var7;
  192.       if (this.method_0(var7, var2, '?')) {
  193.          var3 = var7 + 1;
  194.          var7 = this.scan(var3, var2, "", "#");
  195.          this.checkChars(var3, var7, URI.access$800(), URI.access$900(), "query");
  196.          URI.access$1502(this.this$0, this.substring(var3, var7));
  197.          var3 = var7;
  198.       }
  199.  
  200.       return var3;
  201.    }
  202.  
  203.    private int parseAuthority(int var1, int var2) throws URISyntaxException {
  204.       int var3 = var1;
  205.       int var4 = var1;
  206.       URISyntaxException var5 = null;
  207.       boolean var6;
  208.       if (this.scan(var1, var2, "", "]") > var1) {
  209.          var6 = this.scan(var1, var2, URI.access$1600(), URI.access$1700()) == var2;
  210.       } else {
  211.          var6 = this.scan(var1, var2, URI.access$1800(), URI.access$1900()) == var2;
  212.       }
  213.  
  214.       boolean var7 = this.scan(var1, var2, URI.access$2000(), URI.access$2100()) == var2;
  215.       if (var7 && !var6) {
  216.          URI.access$2202(this.this$0, this.substring(var1, var2));
  217.          return var2;
  218.       } else {
  219.          if (var6) {
  220.             try {
  221.                var4 = this.parseServer(var3, var2);
  222.                if (var4 < var2) {
  223.                   this.failExpecting("end of authority", var4);
  224.                }
  225.  
  226.                URI.access$2202(this.this$0, this.substring(var3, var2));
  227.             } catch (URISyntaxException var9) {
  228.                URI.access$2302(this.this$0, (String)null);
  229.                URI.access$2402(this.this$0, (String)null);
  230.                URI.access$2502(this.this$0, -1);
  231.                if (this.requireServerAuthority) {
  232.                   throw var9;
  233.                }
  234.  
  235.                var5 = var9;
  236.                var4 = var1;
  237.             }
  238.          }
  239.  
  240.          if (var4 < var2) {
  241.             if (var7) {
  242.                URI.access$2202(this.this$0, this.substring(var1, var2));
  243.             } else {
  244.                if (var5 != null) {
  245.                   throw var5;
  246.                }
  247.  
  248.                this.fail("Illegal character in authority", var4);
  249.             }
  250.          }
  251.  
  252.          return var2;
  253.       }
  254.    }
  255.  
  256.    private int parseServer(int var1, int var2) throws URISyntaxException {
  257.       int var3 = var1;
  258.       int var4 = this.scan(var1, var2, "/?#", "@");
  259.       if (var4 >= var1 && this.method_0(var4, var2, '@')) {
  260.          this.checkChars(var1, var4, URI.access$2600(), URI.access$2700(), "user info");
  261.          URI.access$2302(this.this$0, this.substring(var1, var4));
  262.          var3 = var4 + 1;
  263.       }
  264.  
  265.       if (this.method_0(var3, var2, '[')) {
  266.          ++var3;
  267.          var4 = this.scan(var3, var2, "/?#", "]");
  268.          if (var4 > var3 && this.method_0(var4, var2, ']')) {
  269.             int var5 = this.scan(var3, var4, "", "%");
  270.             if (var5 > var3) {
  271.                this.parseIPv6Reference(var3, var5);
  272.                if (var5 + 1 == var4) {
  273.                   this.fail("scope id expected");
  274.                }
  275.  
  276.                this.checkChars(var5 + 1, var4, URI.access$2800(), URI.access$2900(), "scope id");
  277.             } else {
  278.                this.parseIPv6Reference(var3, var4);
  279.             }
  280.  
  281.             URI.access$2402(this.this$0, this.substring(var3 - 1, var4 + 1));
  282.             var3 = var4 + 1;
  283.          } else {
  284.             this.failExpecting("closing bracket for IPv6 address", var4);
  285.          }
  286.       } else {
  287.          var4 = this.parseIPv4Address(var3, var2);
  288.          if (var4 <= var3) {
  289.             var4 = this.parseHostname(var3, var2);
  290.          }
  291.  
  292.          var3 = var4;
  293.       }
  294.  
  295.       if (this.method_0(var3, var2, ':')) {
  296.          ++var3;
  297.          var4 = this.scan(var3, var2, "", "/");
  298.          if (var4 > var3) {
  299.             this.checkChars(var3, var4, URI.access$3000(), 0L, "port number");
  300.  
  301.             try {
  302.                URI.access$2502(this.this$0, Integer.parseInt(this.substring(var3, var4)));
  303.             } catch (NumberFormatException var6) {
  304.                this.fail("Malformed port number", var3);
  305.             }
  306.  
  307.             var3 = var4;
  308.          }
  309.       }
  310.  
  311.       if (var3 < var2) {
  312.          this.failExpecting("port number", var3);
  313.       }
  314.  
  315.       return var3;
  316.    }
  317.  
  318.    private int scanByte(int var1, int var2) throws URISyntaxException {
  319.       int var4 = this.scan(var1, var2, URI.access$3000(), 0L);
  320.       if (var4 <= var1) {
  321.          return var4;
  322.       } else {
  323.          return Integer.parseInt(this.substring(var1, var4)) > 255 ? var1 : var4;
  324.       }
  325.    }
  326.  
  327.    private int scanIPv4Address(int var1, int var2, boolean var3) throws URISyntaxException {
  328.       int var6 = this.scan(var1, var2, URI.access$3000() | URI.access$3100(), 0L | URI.access$3200());
  329.       if (var6 > var1 && (!var3 || var6 == var2)) {
  330.          int var5;
  331.          if ((var5 = this.scanByte(var1, var6)) > var1) {
  332.             int var4 = var5;
  333.             if ((var5 = this.scan(var5, var6, '.')) > var4) {
  334.                var4 = var5;
  335.                if ((var5 = this.scanByte(var5, var6)) > var4) {
  336.                   var4 = var5;
  337.                   if ((var5 = this.scan(var5, var6, '.')) > var4) {
  338.                      var4 = var5;
  339.                      if ((var5 = this.scanByte(var5, var6)) > var4) {
  340.                         var4 = var5;
  341.                         if ((var5 = this.scan(var5, var6, '.')) > var4) {
  342.                            var4 = var5;
  343.                            if ((var5 = this.scanByte(var5, var6)) > var4 && var5 >= var6) {
  344.                               return var5;
  345.                            }
  346.                         }
  347.                      }
  348.                   }
  349.                }
  350.             }
  351.          }
  352.  
  353.          this.fail("Malformed IPv4 address", var5);
  354.          return -1;
  355.       } else {
  356.          return -1;
  357.       }
  358.    }
  359.  
  360.    private int takeIPv4Address(int var1, int var2, String var3) throws URISyntaxException {
  361.       int var4 = this.scanIPv4Address(var1, var2, true);
  362.       if (var4 <= var1) {
  363.          this.failExpecting(var3, var1);
  364.       }
  365.  
  366.       return var4;
  367.    }
  368.  
  369.    private int parseIPv4Address(int var1, int var2) {
  370.       int var3;
  371.       try {
  372.          var3 = this.scanIPv4Address(var1, var2, false);
  373.       } catch (URISyntaxException var5) {
  374.          return -1;
  375.       } catch (NumberFormatException var6) {
  376.          return -1;
  377.       }
  378.  
  379.       if (var3 > var1 && var3 < var2 && this.charAt(var3) != ':') {
  380.          var3 = -1;
  381.       }
  382.  
  383.       if (var3 > var1) {
  384.          URI.access$2402(this.this$0, this.substring(var1, var3));
  385.       }
  386.  
  387.       return var3;
  388.    }
  389.  
  390.    private int parseHostname(int var1, int var2) throws URISyntaxException {
  391.       int var3 = var1;
  392.       int var5 = -1;
  393.  
  394.       int var7;
  395.       do {
  396.          var7 = this.scan(var3, var2, URI.access$2800(), URI.access$2900());
  397.          if (var7 <= var3) {
  398.             break;
  399.          }
  400.  
  401.          var5 = var3;
  402.          if (var7 > var3) {
  403.             var3 = var7;
  404.             var7 = this.scan(var7, var2, URI.access$2800() | URI.access$3300(), URI.access$2900() | URI.access$3400());
  405.             if (var7 > var3) {
  406.                if (this.charAt(var7 - 1) == '-') {
  407.                   this.fail("Illegal character in hostname", var7 - 1);
  408.                }
  409.  
  410.                var3 = var7;
  411.             }
  412.          }
  413.  
  414.          var7 = this.scan(var3, var2, '.');
  415.          if (var7 <= var3) {
  416.             break;
  417.          }
  418.  
  419.          var3 = var7;
  420.       } while(var7 < var2);
  421.  
  422.       if (var3 < var2 && !this.method_0(var3, var2, ':')) {
  423.          this.fail("Illegal character in hostname", var3);
  424.       }
  425.  
  426.       if (var5 < 0) {
  427.          this.failExpecting("hostname", var1);
  428.       }
  429.  
  430.       if (var5 > var1 && !URI.access$300(this.charAt(var5), 0L, URI.access$400())) {
  431.          this.fail("Illegal character in hostname", var5);
  432.       }
  433.  
  434.       URI.access$2402(this.this$0, this.substring(var1, var3));
  435.       return var3;
  436.    }
  437.  
  438.    private int parseIPv6Reference(int var1, int var2) throws URISyntaxException {
  439.       int var3 = var1;
  440.       boolean var5 = false;
  441.       int var4 = this.scanHexSeq(var1, var2);
  442.       if (var4 > var1) {
  443.          var3 = var4;
  444.          if (this.method_1(var4, var2, "::")) {
  445.             var5 = true;
  446.             var3 = this.scanHexPost(var4 + 2, var2);
  447.          } else if (this.method_0(var4, var2, ':')) {
  448.             var3 = this.takeIPv4Address(var4 + 1, var2, "IPv4 address");
  449.             this.ipv6byteCount += 4;
  450.          }
  451.       } else if (this.method_1(var1, var2, "::")) {
  452.          var5 = true;
  453.          var3 = this.scanHexPost(var1 + 2, var2);
  454.       }
  455.  
  456.       if (var3 < var2) {
  457.          this.fail("Malformed IPv6 address", var1);
  458.       }
  459.  
  460.       if (this.ipv6byteCount > 16) {
  461.          this.fail("IPv6 address too long", var1);
  462.       }
  463.  
  464.       if (!var5 && this.ipv6byteCount < 16) {
  465.          this.fail("IPv6 address too short", var1);
  466.       }
  467.  
  468.       if (var5 && this.ipv6byteCount == 16) {
  469.          this.fail("Malformed IPv6 address", var1);
  470.       }
  471.  
  472.       return var3;
  473.    }
  474.  
  475.    private int scanHexPost(int var1, int var2) throws URISyntaxException {
  476.       if (var1 == var2) {
  477.          return var1;
  478.       } else {
  479.          int var4 = this.scanHexSeq(var1, var2);
  480.          int var3;
  481.          if (var4 > var1) {
  482.             var3 = var4;
  483.             if (this.method_0(var4, var2, ':')) {
  484.                var3 = var4 + 1;
  485.                var3 = this.takeIPv4Address(var3, var2, "hex digits or IPv4 address");
  486.                this.ipv6byteCount += 4;
  487.             }
  488.          } else {
  489.             var3 = this.takeIPv4Address(var1, var2, "hex digits or IPv4 address");
  490.             this.ipv6byteCount += 4;
  491.          }
  492.  
  493.          return var3;
  494.       }
  495.    }
  496.  
  497.    private int scanHexSeq(int var1, int var2) throws URISyntaxException {
  498.       int var4 = this.scan(var1, var2, URI.access$100(), URI.access$200());
  499.       if (var4 <= var1) {
  500.          return -1;
  501.       } else if (this.method_0(var4, var2, '.')) {
  502.          return -1;
  503.       } else {
  504.          if (var4 > var1 + 4) {
  505.             this.fail("IPv6 hexadecimal digit sequence too long", var1);
  506.          }
  507.  
  508.          this.ipv6byteCount += 2;
  509.  
  510.          int var3;
  511.          for(var3 = var4; var3 < var2 && this.method_0(var3, var2, ':') && !this.method_0(var3 + 1, var2, ':'); var3 = var4) {
  512.             ++var3;
  513.             var4 = this.scan(var3, var2, URI.access$100(), URI.access$200());
  514.             if (var4 <= var3) {
  515.                this.failExpecting("digits for an IPv6 address", var3);
  516.             }
  517.  
  518.             if (this.method_0(var4, var2, '.')) {
  519.                --var3;
  520.                break;
  521.             }
  522.  
  523.             if (var4 > var3 + 4) {
  524.                this.fail("IPv6 hexadecimal digit sequence too long", var3);
  525.             }
  526.  
  527.             this.ipv6byteCount += 2;
  528.          }
  529.  
  530.          return var3;
  531.       }
  532.    }
  533. }
  534.